1. Simulación de convolución PR04

Existen diferentes metodos para ralizar la simulación numérica de una comvolución. La convolución se define como:
Por lo que es necesario resolver la integral y hace necesario entender que significa integrar numéricmente para poder inplementar un algoritmo que resuelva el problema, para esta implementación se debe tener en cuanta que es imposible hacer sululaciones que involucren cantidades infinitas, por lo que, si una señal tiene duración y la otra tuene duración la convolución tendra una duración .
En esta sección se realizó la simulacíon numérica de la convolución del ejercició 1 del PR04, para lo cual se emplea la siguiente función de MATLAB.
function convconm(x,h)
figure (1) % Se crea una figura para hacer las gráficas
dtau = 0.005; % Base de los rectangulos para realizar la integral
tau = -1:dtau:4; % Intervalo de visualización del resultado
ti = 0; % Indice para el vector de resultados
tvec = -.25:.1:3.75; % traslaciones de t, cuantas integrales se calulan
y = NaN*zeros(1, length (tvec)); % Resultados de acuerdo a cuantos t
for t = tvec, % Cantidad de traslaciones
ti = ti+1; % Indice para guardar el resultado (indice del tiempo)
xh = x(t-tau).*h(tau); % resultado de la multiplicación
lxh = length(xh); % longitud del resultado
y(ti) = sum(xh.*dtau); % Base por altura, aproximación de la integral
subplot (2,1,1), % gráfica de 2 x 1 (primera)
plot(tau, h(tau), 'r-', tau, x(t-tau), 'g--', t, 0, 'ob'); %graficas
axis ([tau(1) tau(end) -2.0 2.5]); % límites de los ejes
patch([tau(1:end-1); tau(1:end-1); tau(2:end); tau(2:end)],...
[zeros(1,lxh-1);xh(1:end-1);xh(2:end);zeros(1,lxh-1)],...
[.8 .8 .8], 'edgecolor', 'none');
xlabel('\tau'); % Texto del eje X
legend('h(\tau)', 'x(t-\tau)','t','h(\tau)x(t-\tau)')% Caja de Texto
subplot (2, 1, 2) % gráfica de 2 x 1 (segunda)
plot (tvec, y, 'k', tvec (ti), y(ti), 'ok');
xlabel ('t');
ylabel ('y(t) = \int h(\tau)x(t-\tau) d\tau');
axis ([tau(1) tau(end) -1.0 2.0]); % límites del eje
grid; % malla
drawnow; % efecto de movimiento continuo
end
end
Al ejecutar las siguientes instrucciones en el Command Window verificando que el directorio de trabajo es el mismo donde se encuentra la función convconm obtendrémos el siguente resultado.
x = @(t) t.*(t>=-1 & t<1);
h = @(t) exp(-t).*(t>=0 & t<1.0);
convconm(x,h)
A continuación se muestran las gráficas correspondientes al resultado analitico obtenidas en el PR04.

2. Simulación de correlación PR05

Una forma de enfrentar este problema es recordar que:
Se efectuo la simulación de autocorrelación de la función
=u(t)-2u(t-3)+u(t-4)
Para lo cual se empleo el codigo de convolución con la siguiente entrada en el Command Window.
h = @(t) 1*((t>=0 & t<2)-1*(t>=2 & t<4));
x = @(t) 1*((t>=-4&t<-2) - (t>=-2&t<0));
convconm(x,h)
A continuación se muestran las gráficas correspondientes al resultado analitico obtenidas en el PR05.

3. Convolución de señales en tiempo discreto

La convolución de señales en tiempo discreto da como resultado otra señal en tiempo discreto, la operación se define como:
No es posible obtener el resultado de esta operacion para señales de longitud infinita mediante calculos computacionales, por lo que es necesario acotar nuestra descripción a señales causales de longitud finita, considerando que:
A continuación se muestra el código de la función usada para realizar una simulación de la convolución de las señales (c) y (d) del problema 3.1.1 de Lathi.
function convdisc(x1,x2)
Tam1 = size(x1(1,:));
Tam2 = size(x2(1,:));
T1 = Tam1(2);
T2 = Tam2(2);
T3 = T1+T2-1;
vec1 = zeros(1,T1+2*T2-2);
vec2 = zeros(1,T1+2*T2-2);
Tec2 = -(T2-1):(T1+T2-2);
size(vec2);
size(Tec2);
x3=zeros(2,T3);
x3(1,:)=0:T3-1;
x3(1,:)=x3(1,:)+x1(1,1)+x2(1,1);
vec1(1,T2:T2+T1-1)=x1(2,:);
figure (1)
hFig = figure(1);
set(hFig, 'Position', [0 0 1000 1000])
filename = 'testAnimated.gif';
ttt=1;
for m=0:T1+T2-2
vec2(1,1+m:T2+m)=fliplr(x2(2,:));
x3(2,m+1)=sum(vec1.*vec2);
subplot(4,1,4)
stem(x3(1,:),x3(2,:),'r','LineWidth',3)
axis([Tec2(1),T1+2*T2-2, min(x3(2,:))-1 max(x3(2,:))+1])
ylim('auto')
ylabel('x_3[n]','FontWeight','bold','FontSize',16);
xlabel('n','FontWeight','bold','FontSize',16);
grid on
subplot(4,1,2)
stem(x2(1,:),x2(2,:),'k','LineWidth',3)
ylabel('x_2[m]','FontWeight','bold','FontSize',16);
xlabel('m','FontWeight','bold','FontSize',16);
grid on
axis([Tec2(1),T1+2*T2-2, min(x2(2,:))-1 max(x2(2,:))+1])
ylim('auto')
subplot(4,1,1)
stem(x1(1,:),x1(2,:),'b','LineWidth',3)
ylabel('x_1[m]','FontWeight','bold','FontSize',16);
xlabel('m','FontWeight','bold','FontSize',16);
title('CONVOLUCIóN/CORRELACIÓN','FontWeight','bold','FontSize',16);
grid on
axis([Tec2(1),T1+2*T2-2, min(x1(2,:))-1 max(x1(2,:))+1])
ylim('auto')
subplot(4,1,3)
stem(Tec2,vec2(1,:),'g','LineWidth',3)
axis([Tec2(1),T1+2*T2-2,min(vec2)-1, max(vec2)+1 ])
ylim('auto')
ylabel('x_2[n-m]','FontWeight','bold','FontSize',16);
xlabel('m','FontWeight','bold','FontSize',16);
grid on
drawnow;
pause(0.4)
vec2 = zeros(1,T1+2*T2-2);
frame = getframe(hFig);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
% Write to the GIF File
if ttt == 1
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
ttt=ttt+1;
end
end
Si ejecutamos las siguientes instrucciones en el Command Window y el directorio de trabajo es el mismo donde se encuentra la función convdisc obtendrémos el siguente resultado.
n=0:9;
a=[0 0 4 2 0 2 4 0 0 0 ];
b=[0 -9 -6 -3 0 3 6 9 0 0];
convdisc([n;a],[n;b])

4. Correlación en tiempo discreto

La correlación de las señales y puede definirse a partir de la convolución, esto es:
Para usar el código de convolución para obtener la correlación de las señales (c) y (d) del problema 3.1.1 de Lathi, debemos escribir en el Command Window.
n=0:9;
a=[0 0 4 2 0 2 4 0 0 0 ];
b=[0 -9 -6 -3 0 3 6 9 0 0];
m=length(b);
b=b(m:-1:1)
convdisc([n;a],[n;b])
Con lo que obtendremos la siguiente salida.

5. Comando conv de MATLAB

Convolución de las señales (c) y (d) del problema 3.1.1 Lathi mediante el uso del comando conv de MATLAB.
A continuación se muestra el código de la función usada para realizar una simulación.
function [nc,c] = convdisc2(a,na,b,nb)
mina = min(na)
minb = min(nb)
summin = abs(mina) + abs(minb)
c = conv(a,b)
%normac = length(c)
vxm = length(c) - summin-1
nc = -1*summin:1:vxm
subplot(3,1,1)
stem(na,a)
title('x1');
subplot(3,1,2)
stem(nb,b)
title('x2');
subplot(3,1,3)
stem(nc,c)
title('CONVOLUCIÓN')
end
A continuación introducimos la información de las señales en el Command Window.
clear all;
clc;
na = -4:1:5
a=[0 0 4 2 0 2 4 0 0 0 ];
nb = -4:1:5
b=[0 -9 -6 -3 0 3 6 9 0 0];
[nc,c] = convdisc2(a,na,b,nb);
Con lo que tendrmos la siguiente salida.